﻿// -----------------------------------------------------------------------
// <copyright file="FileAttributes.cs" company="Company">
// Company 2011
// </copyright>
// -----------------------------------------------------------------------

using System;
using System.Runtime.InteropServices;

namespace Company.IO.Interfaces
{
    /// <summary>
    /// This enumeration has a FlagsAttribute attribute that allows a bitwise combination of its member values.
    /// </summary>
    [Flags]
    [ComVisible(true)]
    [Serializable]
    public enum FileAttributes
    {
        /// <summary>
        /// The file is read-only.
        /// </summary>
        ReadOnly = global::System.IO.FileAttributes.ReadOnly,

        /// <summary>
        /// The file is hidden, and thus is not included in an ordinary directory listing.
        /// </summary>
        Hidden = global::System.IO.FileAttributes.Hidden,

        /// <summary>
        /// The file is a system file. The file is part of the operating system or is used exclusively by the operating system.
        /// </summary>
        System = global::System.IO.FileAttributes.System,

        /// <summary>
        /// The file is a directory.
        /// </summary>
        Directory = global::System.IO.FileAttributes.Directory,

        /// <summary>
        /// The file's archive status. Applications use this attribute to mark files for backup or removal.
        /// </summary>
        Archive = global::System.IO.FileAttributes.Archive,

        /// <summary>
        /// Reserved for future use.
        /// </summary>
        Device = global::System.IO.FileAttributes.Device,

        /// <summary>
        /// The file is normal and has no other attributes set. This attribute is valid only if used alone.
        /// </summary>
        Normal = global::System.IO.FileAttributes.Normal,

        /// <summary>
        /// The file is temporary. File systems attempt to keep all of the data in memory for quicker access 
        /// rather than flushing the data back to mass storage. 
        /// A temporary file should be deleted by the application as soon as it is no longer needed.
        /// </summary>
        Temporary = global::System.IO.FileAttributes.Temporary,

        /// <summary>
        /// The file is a sparse file. Sparse files are typically large files whose data are mostly zeros.
        /// </summary>
        SparseFile = global::System.IO.FileAttributes.SparseFile,

        /// <summary>
        /// The file contains a reparse point, which is a block of user-defined data associated with a file or a directory.
        /// </summary>
        ReparsePoint = global::System.IO.FileAttributes.ReparsePoint,

        /// <summary>
        /// The file is compressed.
        /// </summary>
        Compressed = global::System.IO.FileAttributes.Compressed,

        /// <summary>
        /// The file is offline. The data of the file is not immediately available.
        /// </summary>
        Offline = global::System.IO.FileAttributes.Offline,

        /// <summary>
        /// The file will not be indexed by the operating system's content indexing service.
        /// </summary>
        NotContentIndexed = global::System.IO.FileAttributes.NotContentIndexed,

        /// <summary>
        /// The file or directory is encrypted. 
        /// For a file, this means that all data in the file is encrypted. 
        /// For a directory, this means that encryption is the default for newly created files and directories.
        /// </summary>
        Encrypted = global::System.IO.FileAttributes.Encrypted
    }
}